自由軟體的世界有時候變化得很快,昨天的情況就是個例子,opencv 2.4.4可以支援,但2.4.9之後就不太支援了。可惜了一個好工具。而opencv 現在已出到3.x, 筆者自編譯的opencv也到3.1.x了。所以看看官網怎麼說?
以這篇初入門來說,提到一個重點,Numpy很重要。
And the support of Numpy makes the task more easier. Numpy is a
highly optimized library for numerical operations. It gives a MATLAB-style syntax.
第二篇,設定環境, 提到,兩個重點,一是編譯opencv,二是裝套件,除了上篇入門的Numpy之外,還有**Matplotlib **,這是可選的項目。
cmake的圖形設定工具,也講的很詳細。
第三篇是在linux上設定環境,以fedora發行版為例,筆者近十年沒用了,不太會用,可參考,除了裝套件指令不同外 ,還是從源始碼編譯opencv。
其實cmake在linux上仍然有gui設定介面。這裏沒示範。
再來,終於可以寫點code了,
是opencv框架裏的Gui 輔助,
有5個範例,第一個例子,用opencv來實作圖面的讀入cv2.imread,秀出來cv2.imshow,寫到另一個檔cv2.imwrite。
算是一個無痛的入門。
筆者用比較古早的*ipython notebook * 做為開發環境,如下圖 ,
自訂一個目錄夾,把圖片放進去,就可測試了。
這範例會用灰階秀圖,cv2.imread('lom.jpg',0), 第二個參數0有影響,按ESC鍵是結束,按S鍵會另存新檔。
from matplotlib import pyplot as plt
img = cv2.imread('messi5.jpg',0)
plt.imshow(img, cmap = 'gray', interpolation = 'bicubic')
plt.xticks([]), plt.yticks([]) # to hide tick values on X and Y axis
plt.show()
如果沒有裝matplotlib,就死給你看。
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
<ipython-input-4-947d4509aa91> in <module>()
----> 1 from matplotlib import pyplot as plt
2
3 img = cv2.imread('messi5.jpg',0)
4 plt.imshow(img, cmap = 'gray', interpolation = 'bicubic')
5 plt.xticks([]), plt.yticks([]) # to hide tick values on X and Y axis
ImportError: No module named matplotlib
在UBUNTU下,可用Synaptic 搜尋此套件安裝,裝完,重新 ipython notebook, 看 matplotlib的效果
第二個範例是從筆電的攝影機,或影片檔讀入影像(video)。比較特別的是影片的規格,叫fourcc。 opencv 還是要具備一般影像處理能力。
不用裝DRIVER,自動會抓到。筆電沒有攝像頭,就麻煩了。還好不是光碟機。
筆者的筆電比較LOW,等了一下才出現。按Q 離開程式。
放一段影片,轉自YOUTUBE,先試一下MP4格式,
cap = cv2.VideoCapture('tai.mp4')
會呈現快進的效果,然後當掉,IPYTHON 自動重啟。
訊息為,
---------------------------------------------------------------------------
error Traceback (most recent call last)
<ipython-input-2-790149e65123> in <module>()
7 ret, frame = cap.read()
8
----> 9 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
10
11 cv2.imshow('frame',gray)
error: /home/timloo/mvn-java-web/opencv/modules/imgproc/src/color.cpp:9748: error: (-215) scn == 3 || scn == 4 in function cvtColor
下載成AVI格式,仍然是當掉。
cap = cv2.VideoCapture('tai.avi')
不要灰階模式,換一下HSV模式,
![]
還是當掉,但是訊息不太一樣。
---------------------------------------------------------------------------
error Traceback (most recent call last)
<ipython-input-1-45180fe35f9d> in <module>()
8
9 #gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
---> 10 hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
11 #cv2.imshow('frame',gray)
12 cv2.imshow('frame',hsv)
error: /home/timloo/mvn-java-web/opencv/modules/imgproc/src/color.cpp:9815: error: (-215) (scn == 3 || scn == 4) && (depth == CV_8U || depth == CV_32F) in function cvtColor
希望之後對影像處理更深入理解後,可以解此問題。
下一個子範例,會把影像上下翻轉後,另存新檔,但不做灰階,或HSV處理。
frame = cv2.flip(frame,0)
這行是上下翻轉,把它註解(#)掉後,
影像就正常了。
把此範例另存的AVI檔,餵給上個範例,仍然會當掉。3年前的教學,在現在還是有一些修正。
第三範例,是把opencv當小畫家使用,在圖片上 **畫線cv2.line(),畫圓 cv2.circle() , 畫畫方cv2.rectangle(), 畫蛋cv2.ellipse(), 寫字cv2.putText() **。
當照著範例KEY IN 後,按執行並不會秀出圖,因為沒有相對應的程式碼,請補上
cv2.imshow('image',img)
k = cv2.waitKey(0)
if k == 27: # wait for ESC key to exit
cv2.destroyAllWindows()
[第四例](https://opencv-python-tutroals.readthedocs.io/en/l atest/py_tutorials/py_gui/py_mouse_handling/py_mouse_handling.html),把滑鼠當畫筆來刷刷刷,
第五例,是進階的ui 控制,可以拖拉bar來改變數值。模擬調色盤的效果。
接下來是
核心操作篇,下面分4小節,
第一例是:圖片基本操作,裏面示範了,1。讀取/更新像素值。2讀取圖片屬性。3讀取圖片部分
region of images(ROI)。4. 分離和合併顏色通道(Channels)。5為圖片加上框。
第二例是:圖片的四則運算。兩張圖片的加法。位元級的四則運算,Bitwise Operations,不是加減乘除,是AND, OR, NOT and XOR 。
第三例是:
… 以下自行測試。應該會有些異常的結果,畢竟這是三年級的入門。可以試著回應給作者更新。
IPython 是一個強大且方便的工具,它的未來版本Jupyter更加強大 ,可惜在UBUNTU的套件庫裏沒找到,
已經有網友分享,有免費的雲端版試用,不用裝在本機。
目前在播放影片時,做些顏色強化,有異常發生。